package site.sorghum.ddl.wood.spring;

import org.noear.wood.DbContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import site.sorghum.ddl.config.DdlGlobalConfig;
import site.sorghum.ddl.wood.WoodDdlWrapper;
import site.sorghum.ddl.wood.WoodEntityGenerate;
import site.sorghum.ddl.wood.WoodInitConfig;

import javax.sql.DataSource;

@Configuration
public class Config {


    // ---------------------------- mybatis-flex ------------------

//    @Bean
//    FlexEntityGenerate flexEntityGenerate() {
//        return new FlexEntityGenerate();
//    }


//    @Bean
//    FlexDdlWrapper flexDdlWrapper(@Autowired DataSource dataSource) {
//        return new FlexDdlWrapper(dataSource);
//    }

    // ---------------------------- mybatis-flex ------------------

    // ---------------------------- mybatis-plus ------------------
//    @Bean
//    MybatisPlusEntityGenerate mybatisPlusEntityGenerate() {
//        return new MybatisPlusEntityGenerate();
//    }


//    @Bean
//    MybatisPlusDdlWrapper mybatisPlusDdlWrapper(@Autowired DataSource dataSource) {
//        return new MybatisPlusDdlWrapper(dataSource);
//    }
    // ---------------------------- mybatis-plus ------------------

    // ---------------------------- mybatis ------------------
//    @Bean
//    MybatisEntityGenerate mybatisEntityGenerate() {
//        return new MybatisEntityGenerate();
//    }


//    @Bean
//    MybatisDdlWrapper mybatisDdlWrapper(@Autowired DataSource dataSource) {
//        return new MybatisDdlWrapper(dataSource);
//    }

    // ---------------------------- mybatis ------------------

    @Bean
    DbContext dbContext(@Autowired DataSource dataSource) {
        return new DbContext(dataSource);
    }

    @Bean
    WoodEntityGenerate woodEntityGenerate() {
        return new WoodEntityGenerate();
    }


    @Bean
    WoodDdlWrapper woodDdlWrapper(@Autowired DbContext dbContext) {
        return new WoodDdlWrapper(dbContext);
    }


    /**
     * 初始化配置
     * <br>mybatis -> MybatisInitConfig
     * <br>mybatis-plus -> MybatisPlusInitConfig
     * <br>mybatis-flex -> FlexInitConfig
     */
    @Bean
    WoodInitConfig woodInitConfig(@Autowired WoodDdlWrapper woodDdlWrapper, @Autowired WoodEntityGenerate woodEntityGenerate) {
        // 以下配置随意指定！
        // 指定要扫描的实体类包
        DdlGlobalConfig.basePackages.add("site.sorghum.ddl.wood.entity");
        // 自动创建新表
        DdlGlobalConfig.createTable = true;
        // 自动增加新增索引
        DdlGlobalConfig.addIndex = true;
        // 自动增加新增列
        DdlGlobalConfig.addColumn = true;
        // 自动删除多余列
        DdlGlobalConfig.dropColumn = true;
        // 自动删除多余索引
        DdlGlobalConfig.dropIndex = true;
        return new WoodInitConfig(woodDdlWrapper, woodEntityGenerate);
    }
}
